7.6 f90_unix_file
このモジュールは ISO/IEC 9945-1:1990 Portable Operating System Interface (POSIX) - Part 1: System Application Program Interface (API) [C Language] で詳細に規定される機能に対するFortran APIの一部を提供するものです。
このモジュール中の関数はセクション5.6 ファイルの特徴に由来するものです。
エラー処理についてはF90_UNIX_ERRNOに記述されています。
省略可能なERRNO引数を用いた手続きに対し、エラーが生じERRNO
が存在しなかった場合には、プログラムは終了させられる点に注意してください。
このモジュール中のすべての手続きは総称的なものです。いくつかは個別的でもあります が、これは将来のリリースで変わる可能性があります。
7.6.1 パラメータ
INTEGER(int32),PARAMETER :: F_OKファイルが存在するかどうかのチェック(
ACCESS参照)を要求するフラグ。
USE F90_UNIX_ENV,ONLY:ID_KINDこのパラメータに関する記述については
F90_UNIX_ENVの項を参照。
USE F90_UNIX_DIR,ONLY:MODE_KINDこのパラメータに関する記述については
F90_UNIX_DIRの項を参照。
INTEGER(int32),PARAMETER :: R_OKファイルが読めるかどうかのチェック(
ACCESS参照)を要求するフラグ。
INTEGER(MODE_KIND),PARAMETER :: S_IRGRPグループに対する読み取り許可(
STAT_T参照)を示すファイルモードビット。
INTEGER(MODE_KIND),PARAMETER :: S_IROTHその他に対する読み取り許可(
STAT_T参照)を示すファイルモードビット。
INTEGER(MODE_KIND),PARAMETER :: S_IRUSRユーザに対する読み取り許可(
STAT_T参照)を示すファイルモードビット。
INTEGER(MODE_KIND),PARAMETER :: S_IRWXGファイルモードからグループアクセス権限ビットを選択するためのマスク (
STAT_T参照)。
INTEGER(MODE_KIND),PARAMETER :: S_IRWXOファイルモードからその他のアクセス権限ビットを選択するためのマスク (
STAT_T参照)。
INTEGER(MODE_KIND),PARAMETER :: S_IRWXUファイルモードからユーザアクセス権限ビットを選択するためのマスク (
STAT_T参照)。
INTEGER(MODE_KIND),PARAMETER :: S_ISGIDファイルがset-group-ID(
STAT_T参照)であることを示すファイルモード
ビット。
INTEGER(MODE_KIND),PARAMETER :: S_ISUIDファイルがset-user-ID(
STAT_T参照)であることを示すファイルモード
ビット。
INTEGER(MODE_KIND),PARAMETER :: S_IWGRPグループの書き込み許可を示すファイルモードビット(
STAT_T参照)。
INTEGER(MODE_KIND),PARAMETER :: S_IWOTHその他の書き込み許可を示すファイルモードビット(
STAT_T参照)。
INTEGER(MODE_KIND),PARAMETER :: S_IWUSRユーザの書き込み許可を示すファイルモードビット(
STAT_T参照)。
INTEGER(MODE_KIND),PARAMETER :: S_IXGRPグループの実行許可を示すファイルモードビット(
STAT_T参照)。
INTEGER(MODE_KIND),PARAMETER :: S_IXOTHその他の実行許可を示すファイルモードビット(
STAT_T参照)。
INTEGER(MODE_KIND),PARAMETER :: S_IXUSRユーザの実行許可を示すファイルモードビット(
STAT_T参照)。
USE F90_UNIX_ENV,ONLY :: TIME_KINDこのパラメータに関する記述については
F90_UNIX_ENVの項を参照。
INTEGER(int32),PARAMETER :: W_OKファイルが書けるかどうかのチェック(
ACCESS参照)を要求するフラグ。
INTEGER(int32),PARAMETER :: X_OKファイルが実行可能かどうかのチェック(
ACCESS参照)を要求するフラグ。
7.6.2 型
TYPE stat_t
INTEGER(MODE_KIND) st_mode
INTEGER(...) st_ino
INTEGER(...) st_dev
INTEGER(...) st_nlink
INTEGER(id_kind) st_uid
INTEGER(id_kind) st_gid
INTEGER(...) st_size
INTEGER(TIME_KIND) st_atime, st_mtime, st_ctime
END TYPE
ファイルの特性を保持している構造体。
ST_MODE- ファイルモード(ユーザ/グループ/その他に対する読み取り/書き込み/実行許可、 及びset-group-ID, set-user-IDビット)。
ST_INO- ファイルのシリアル番号。
ST_DEV- ファイルが存在している装置に対するID。
ST_NLINK- ファイルに対するリンク(
F90_UNIX_DIR,LINK操作参照)の数。 ST_UID- ファイル所有者のユーザ番号。
ST_GID- ファイルのグループ番号。
ST_SIZE- バイト単位のファイルサイズ(通常ファイルのみ)。
ST_ATIME- 最後にアクセスした時刻。
ST_MTIME- 最後に変更を加えた時刻。
ST_CTIME- 最後にファイル状態が変更された時刻。
TYPE UTIMBUF
INTEGER(time_kind) actime, modtime
END TYPE
UTIMEとの交信用時刻値を保持するためのデータ型。
ACTIMEはST_ATIMEに対する、MODTIMEはST_MTIMEに
対する新たな値を意味しています。
7.6.3 手続き
PURE SUBROUTINE access(path,amode,errno)
CHARACTER(*),INTENT(IN) :: path
INTEGER(*),INTENT(IN) :: amode
INTEGER(error_kind),INTENT(OUT) :: errno
AMODEの値(F_OKか、またはR_OK, W_OK, X_OK
の組合せでなくてはなりません)に従ってファイルのアクセス権限ビットをチェック
します。後者の場合、値は加算、または組込み関数IORによって結合されます。
アクセス権限ビットのチェック結果はERRNO中に応答として返されます。アク
セス可(すなわちファイルがF_OKとして存在している、あるいはR_OK
等の組合せによって要求されたアクセスがすべて許可されている)の場合は0、アク
セス不可の場合はその理由を示すエラーコードがセットされます。
アクセス拒否のコードにはEACCES, ENAMETOOLONG, ENOENT,
ENOTDIR, EROFSがあります(F90_UNIX_ERRNO参照)。
AMODEの値が不正だった場合にはエラーEINVALが返されます。
ACCESSに関する問合せのほとんどはINQUIRE文と等価です。特に:
CALL ACCESS(PATH,F_OK,ERRNO)- は次の場合に限り成功(
ERRNO==0)を応答します:
INQUIRE(FILE=PATH,EXIST=LVAR)がLVARに対し.TRUE.をセット する場合。 CALL ACCESS(PATH,R_OK,ERRNO)- は次の場合に限り成功(
ERRNO==0)を応答します:
INQUIRE(FILE=PATH,READ=CHVAR)がCHVARに対し'YES'をセット する場合。 CALL ACCESS(PATH,W_OK,ERRNO)- は次の場合に限り成功(
ERRNO==0)を応答します:
INQUIRE(FILE=PATH,WRITE=CHVAR)がCHVARに対し'YES'をセット する場合。 CALL ACCESS(PATH,IOR(W_OK,R_OK),ERRNO)- は次の場合に限り成功(
ERRNO==0)を応答します:
INQUIRE(FILE=PATH,READWRITE=CHVAR)がCHVARに対し'YES'をセット する場合。
ACCESSが拒否理由を応答として返す点、ファイルの実行可能性
をテストできる点にあります。
SUBROUTINE CHMOD(PATH,MODE,ERRNO)
CHARACTER(*),INTENT(IN) :: PATH
INTEGER(*),INTENT(IN) :: MODE
INTEGER(error_kind),OPTIONAL,INTENT(OUT) :: ERRNO
ファイルモード(ST_MODE)をMODEに設定します。
起りうるエラーにはEACCES, ENAMETOOLONG, ENOTDIR,
EPERM, EROFSがあります(F90_UNIX_ERRNO参照)。
SUBROUTINE CHOWN(PATH,OWNER,GROUP,ERRNO)
CHARACTER(*),INTENT(IN) :: PATH
INTEGER(id_kind),INTENT(IN) :: OWNER, GROUP
INTEGER(error_kind),OPTIONAL,INTENT(OUT) :: ERRNO
ファイルPATHの所有者(ST_UID)をOWNERに、グループ番号
(ST_GID)をGROUPに変更します。
起りうるエラーにはEACCES, EINVAL, ENAMETOOLONG,
ENOTDIR, ENOENT, EPERM, EROFSがあります
(F90_UNIX_ERRNO参照)。
SUBROUTINE FSTAT(LUNIT,BUF,ERRNO)
INTEGER(*),INTENT(IN) :: LUNIT
TYPE(stat_t),INTENT(OUT) :: BUF
INTEGER(error_kind),OPTIONAL,INTENT(OUT) :: ERRNO
論理装置LUNITに接続されたファイルの特性がBUFにセットされます。
LUNITが正しい論理装置番号でなかった場合、またはファイルに接続されて
いなかった場合、エラーEBADFが発生します(F90_UNIX_ERRNO参照)。
PURE LOGICAL(word) FUNCTION isblk(mode)
INTEGER(mode_kind),INTENT(IN) :: mode
ファイルが“ブロックデバイス”であることを示すMODE値である場合に
限り.TRUE.が返されます。
PURE LOGICAL(word) FUNCTION ischr(mode)
INTEGER(mode_kind),INTENT(IN) :: mode
ファイルが“キャラクタデバイス”であることを示すMODE値である場合
に限り.TRUE.が返されます。
PURE LOGICAL(word) FUNCTION isdir(mode)
INTEGER(mode_kind),INTENT(IN) :: mode
ファイルがディレクトリ(フォルダ)であることを示すMODE値である場合に
限り.TRUE.が返されます。
PURE LOGICAL(word) FUNCTION isfifo(mode)
INTEGER(mode_kind),INTENT(IN) :: mode
ファイルが“FIFO”(名前付き、または名前なしパイプ)であることを示す
MODE値である場合に限り.TRUE.が返されます。
PURE LOGICAL(word) FUNCTION isreg(mode)
INTEGER(mode_kind),INTENT(IN) :: mode
ファイルが“通常”(regular)であることを示すMODE値である場合に
限り.TRUE.が返されます。
SUBROUTINE STAT(PATH,BUF,ERRNO)
CHARACTER(*),INTENT(IN) :: PATH
TYPE(stat_t),INTENT(OUT) :: BUF
INTEGER(error_kind),OPTIONAL,INTENT(OUT) :: ERRNO
ファイルPATHの特性がBUFにセットされます。
起りうるエラーにはEACCES, ENAMETOOLONG, ENOENT,
ENOTDIRがあります(F90_UNIX_ERRNO参照)。
SUBROUTINE utime(path,times,errno)
CHARACTER(*),INTENT(IN) :: path
TYPE(utimbuf),OPTIONAL,INTENT(IN) :: times
INTEGER(error_kind),OPTIONAL,INTENT(OUT) :: errno
PATHで指定されるファイルのアクセス時刻、変更時刻をそれぞれ、
TIMESのACTIME, MODTIME成分によって指定される値に設定
します。
起りうるエラーにはEACCES, ENAMETOOLONG, ENOENT,
ENOTDIR, EPERM, EROFSがあります
(F90_UNIX_ERRNO参照)。
